package Tree;

import java.util.ArrayList;

/**
 * @Classname JZ08二叉树的下一个节点
 * @Description TODO
 * @Date 2023/2/24 20:00
 * @Created by xjl
 */
public class JZ08二叉树的下一个节点 {

    public class TreeLinkNode {
        int val;
        TreeLinkNode left = null;
        TreeLinkNode right = null;
        TreeLinkNode next = null;

        TreeLinkNode(int val) {
            this.val = val;
        }
    }

    ArrayList<TreeLinkNode> nodes = new ArrayList<>();

    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        // 获取根节点
        TreeLinkNode root = pNode;
        while (root.next != null) {
            root = root.next;
        }
        // 中序遍历打造nodes
        InOrder(root);
        // 进行匹配
        int n = nodes.size();
        for (int i = 0; i < n - 1; i++) {
            TreeLinkNode cur = nodes.get(i);
            if (pNode == cur) {
                return nodes.get(i + 1);
            }
        }
        return null;
    }

    // 中序遍历
    void InOrder(TreeLinkNode root) {
        if (root != null) {
            InOrder(root.left);
            nodes.add(root);
            InOrder(root.right);
        }
    }
}
